#include <libglademm/xml.h>
#include <gtkmm.h>
#include <iostream>
#include "Vista.h"
#include <list>


#ifndef Canvas__H
#define Canvas__H



typedef Glib::RefPtr<Gnome::Glade::Xml> Txmlref;


class Canvas : public Vista//: public sigc::object
{
public:
/*!
 \brief Constructor
 \retval :
 \param rg :
*/
    Canvas(Txmlref& rg);
/*!
 \brief Destructor
 \retval :
 \param  :
*/
    ~Canvas() {}

/*!
 \brief Guarda referencias objetos y conecta senyales
 \retval void :
 \param rg :
*/
    void init_canvas(Txmlref& rg);
/*!
 \brief
 \retval void :
 \param  :
*/
    void actualizar();
/*!
 \brief
 \retval void :
 \param  :
*/
    void actualizar_modelo();

protected:
    Gtk::DrawingArea*     wda;
    Gtk::SpinButton*      wsb;
    Gtk::Button*          wbtS;
    Gtk::Button*          wbtI;
    Gtk::HScale*          wslT;
    Gtk::ComboBox*        wcbV;
    Glib::RefPtr<Gdk::GC> gc;
    Glib::RefPtr<Gdk::GC> gc2;
    Glib::RefPtr<Gdk::GC> gc3;
    int                 point_width;
    int recortex;
    int recortey;
    int k;
    int m;
    int n2;
    int j2;
    int size;
    bool stop;
    int time;

    int tagTimeOut;

/*!
 \brief Recoge el tamanyo del fila del tablero y crea el trablero y lo rellena
 \retval void :
 \param  :
*/
    void get_point_width();
/*!
 \brief inicializa la configuracion de colores CG
 \retval void :
 \param  :
*/
    void init_colors();

/*!
 \brief Pinta un rectangulo en la posicion donde se encuentra el raton
 \retval bool :
 \param event :
*/
    bool da_button_press_event(GdkEventButton* event);
/*!
 \brief Pinta rectangulos debajo del raton en movimiento
 \retval bool :
 \param event :
*/
    bool da_motion_notify_event(GdkEventMotion* event);
/*!
 \brief Repinta la pantalla
 \retval bool :
 \param event :
*/
    bool da_expose_event(GdkEventExpose* event);
/*!
 \brief Desconecta el temporizador
 \retval void :
 \param  :
*/
    void on_Stop_clicked();
/*!
 \brief Cambia la base de tiempo de actualizacion
 \retval void :
 \param  :
*/
    void on_Time_value_changed();
/*!
 \brief Conecta el temporizador
 \retval void :
 \param  :
*/
    void on_Init_clicked();
/*!
 \brief Cambia el algoritmo evolutivo
 \retval void :
 \param  :
*/
    void on_Evolution_changed();
/*!
 \brief Inicializa variables
 \retval void :
 \param void :
*/
    void da_realize(void);
/*!
 \brief Gestiona el cambio de generacion
 \retval bool :
 \param  :
*/
    bool Play();

/*! 
 \brief Salir de la aplicacion 
 \retval void :
 \param  : 
*/
    void exit(){Gtk::Main::quit();}
/*! 
 \brief Abrir fichero con un tablero
 \retval void :
 \param  : 
*/
    void abrir();
/*! 
 \brief Guarda el Estado del trablero 
 \retval void :
 \param  : 
*/
    void guarda();
/*! 
 \brief 
 \retval void :
 \param  : 
*/
    void Pinta();
    void on_Acerca_de();

    sigc::connection  d_timeout_function_connection;
};

#endif
